<?php
/**
 * Created by PhpStorm.
 * User: qiyi
 * Date: 2018/5/25
 * Time: 16:40
 */

namespace App\admin\controller;

use SplQueue;
class Queue
{
    /**
     * spl队列
     * 测试结果，飞快
     * apache  ab -c 10 -n 10  28s耗时
     */
    public function splQueue(){
        $splq = new SplQueue;
        for($i = 0; $i < 1000000; $i++)
        {
            $data = "hello $i\n";
            $splq->push($data);

            if ($i % 100 == 99 and count($splq) > 100)
            {
                $popN = rand(10, 99);
                for ($j = 0; $j < $popN; $j++)
                {
                    $splq->shift();
                }
            }
        }

        $popN = count($splq);
        for ($j = 0; $j < $popN; $j++)
        {
            $splq->pop();
        }
    }

    /**
     * 数组队列
     * 测试结果，在nginx 下 30s 超时，挂了
     * apache  ab -c 10 -n 10  挂了
     * 只能用于模拟，不可正式环境使用
     *
     */
    public function arrQueue(){
        $arrq = array();
        for($i = 0; $i <1000000; $i++)
        {
            $data = "hello $i\n";
            $arrq[] = $data;
            if ($i % 100 == 99 and count($arrq) > 100)
            {
                $popN = rand(10, 99);
                for ($j = 0; $j < $popN; $j++)
                {
                    array_shift($arrq);
                }
            }
        }
        $popN = count($arrq);
        for ($j = 0; $j < $popN; $j++)
        {
            array_shift($arrq);
        }

    }
}